package com.icebartech.core.utils;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Hashtable;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;


public class QRCodeUtil {
	 private static final String CHARSET = "UTF-8";  
	    private static final String FORMAT_NAME = "JPEG";  
	    // 二维码尺寸  
	    private static final int QRCODE_SIZE = 200;  
	    // LOGO宽度  
	    private static final int WIDTH = 60;  
	    // LOGO高度  
	    private static final int HEIGHT = 60; 
	    
	    /**
	     * user: Rex
	     * date: 2016年12月29日  上午12:31:29
	     * @param content 二维码内容
	     * @param logoImgPath Logo
	     * @param needCompress 是否压缩Logo
	     * @return 返回二维码图片
	     * @throws WriterException
	     * @throws IOException
	     * BufferedImage
	     * TODO 创建二维码图片
	     */
	    public static BufferedImage createImage(String content, String logoImgPath, boolean needCompress) throws WriterException, IOException {
	        Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();  
	        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);  
	        hints.put(EncodeHintType.CHARACTER_SET, CHARSET);  
	        hints.put(EncodeHintType.MARGIN, 1);  
	        BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE, hints);  
	        int width = bitMatrix.getWidth();  
	        int height = bitMatrix.getHeight();  
	        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);  
	        for (int x = 0; x < width; x++) {  
	            for (int y = 0; y < height; y++) {  
	                image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);  
	            }  
	        }  
	        if (logoImgPath == null || "".equals(logoImgPath)) {  
	            return image;  
	        }  
	        
	        return image;  
	    }
}
